R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介) |
您所在的位置:网站首页 › linux 并行运算 › R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介) |
终于开始攻克并行这一块了,有点小兴奋,来看看网络上R语言并行办法有哪些: 赵鹏老师(R与并行计算)做的总结已经很到位。现在并行可以分为: 隐式并行:隐式计算对用户隐藏了大部分细节,用户不需要知道具体数据分配方式 ,算法的实现或者底层的硬件资源分配。系统会根据当前的硬件资源来自动启动计算核心。显然,这种模式对于大多数用户来说是最喜闻乐见的。 显性并行:显式计算则要求用户能够自己处理算例中数据划分,任务分配,计算以及最后的结果收集。因此,显式计算模式对用户的要求更高,用户不仅需要理解自己的算法,还需要对并行计算和硬件有一定的理解。值得庆幸的是,现有R中的并行计算框架,如parallel (snow,multicores),Rmpi和foreach等采用的是映射式并行模型(Mapping),使用方法简单清晰,极大地简化了编程复杂度。R用户只需要将现有程序转化为*apply或者for的循环形式之后,通过简单的API替换来实现并行计算。 简单总结就是: 隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLAS,H2O(参考我的博客)等 显性并行:parallel(主打lapply应用)、foreach(主打for循环)、SupR、还有利用GPU的办法(gpuR) 同时并行时对内存的消耗极大,超级容易爆发内存问题,而且R的内存问题一直都是R很难解决的问题,这边笔者也把看到的一些方式列出来。 当然在使用一些高大上的并行包以及框架之前,如果你能够从编码小细节优化,效率也能提高很多,譬如: 代码语言:javascript复制方法:速度, nrow(df)/time_taken = n 行每秒 原始方法:1X, 856.2255行每秒(正则化为1) 向量化方法:738X, 631578行每秒 只考虑真值情况:1002X,857142.9行每秒 ifelse:1752X,1500000行每秒 which:8806X,7540364行每秒 Rcpp:13476X,11538462行每秒 apply处理并行—————————————————————————————————————————————————————— 在最后笔者在实践中遇到的问题,进行对应的解决: 应用一:使用parallel包时,能不能clusterExport整个函数呢?应用二:在使用parallel包时,报错:Error in unserialize(node$con) : error reading from connection—————————————————————————————————— 一、parallel包的使用方法多数内容参考:R语言并行化基础与提高 parallel是base包,所以不用install.packages就可以直接调用。 原理:是利用CPU的核心进行训练。 应用场景:跟apply族(lapply/sapply效果一致)( R语言︱数据分组统计函数族——apply族用法与心得) 1、使用步骤设置核心数:no_cores |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |